package top.v5it.logback.push.channel.weixin;

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * 企业徾信机器人发送消息请求
 *
 * @author zhanpu
 * @date 2021/7/23
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class WeiXinRobotSendRequest implements Serializable {

    private static final long serialVersionUID = -1422692389606785261L;

    /**
     * 消息类型
     */
    private MsgtypeEnum msgtype;

    /**
     * 文本类型
     */
    private Text text;

    /**
     * markdown类型
     */
    private Markdown markdown;

    /**
     * 图片类型
     */
    private Image image;

    /**
     * 图文类型
     */
    private News news;

    /**
     * 文件类型
     */
    private File file;

    /**
     * 消息类型
     */
    public enum MsgtypeEnum {

        /**
         * text
         */
        text,

        /**
         * markdown
         */
        markdown,

        /**
         * image
         */
        image,

        /**
         * news
         */
        news,

        /**
         * file
         */
        file
    }

    @Data
    @EqualsAndHashCode(callSuper = false)
    @Accessors(chain = true)
    public static class Text {

        /**
         * 文本内容，最长不超过2048个字节，必须是utf8编码
         */
        private String content;

        /**
         * 非必填
         * userid的列表，提醒群中的指定成员(@某个成员)，@all表示提醒所有人，如果开发者获取不到userid，可以使用mentioned_mobile_list
         */
        private List<String> mentioned_list;

        /**
         * 非必填
         * 手机号列表，提醒手机号对应的群成员(@某个成员)，@all表示提醒所有人
         */
        private List<String> mentioned_mobile_list;
    }

    @Data
    @Accessors(chain = true)
    @EqualsAndHashCode(callSuper = false)
    public static class Markdown {

        /**
         * markdown内容，最长不超过4096个字节，必须是utf8编码
         * <p>
         * 如果需要at谁，在内容中添加<pre><@userId></pre>
         */
        private String content;

    }

    /**
     * 图片类型
     */
    @Data
    @Accessors(chain = true)
    @EqualsAndHashCode(callSuper = false)
    public static class Image {

        /**
         * 图片内容的base64编码
         */
        private String base64;

        /**
         * 图片内容（base64编码前）的md5值
         */
        private String md5;

    }

    /**
     * 图文类型
     */
    @Data
    @Accessors(chain = true)
    @EqualsAndHashCode(callSuper = false)
    public static class News {

        /**
         * 图文消息，一个图文消息支持1到8条图文
         */
        private List<Article> articles = new ArrayList<>(8);

        public static class Article {

            /**
             * 标题，不超过128个字节，超过会自动截断
             */
            private String title;

            /**
             * 描述，不超过512个字节，超过会自动截断
             */
            private String description;

            /**
             * 点击后跳转的链接
             */
            private String url;

            /**
             * 非必填
             * 图文消息的图片链接，支持JPG、PNG格式，较好的效果为大图 1068*455，小图150*150。
             */
            private String picurl;
        }
    }

    /**
     * 文件类型
     */
    @Data
    @Accessors(chain = true)
    @EqualsAndHashCode(callSuper = false)
    public static class File {

        /**
         * 文件id，通过下文的文件上传接口获取
         */
        private String media_id;
    }
}
